--函数:相当于一种类型 叫做function
function F0()
	print("普通的函数声明");
end
F0();

--传递返回值 多出来的如果不接收就默认为nil
F1=function() --这是另外一种函数的声明方法
	return "123",1;
end

a,b = F1(); --注意这里只要是出现了函数名() 就相当于函数执行了一次了
print(a+b);  
--a接受了1 b接收了123 
--相加会将字符串123自动处理为int 123 =>124

 --传递参数 传递参数数量不匹配会nil 
 F3 =function(a)
 	print(a);
 end
 F3(100);--打印100

--函数不支持重载 默认调用最后一个同名函数
function F4() print("F41") end
function F4() print("F42") end
F4(); --打印F42

--变长参数 使用"表"...
function F5(...)
	args ={...};
	for i=1,#args,1 do --#args代表参数的长度,循环次数 6-1/1+1=6
		print(i)
	end
end
F5(1,2,3,4,5,6) --可以传递不同类型参数 反正也没有类型

--函数嵌套
function BigF()
	print("我是外层函数");
	function smallF()
		print("我是被嵌套函数");
	  end
	return smallF;
 end

--BigF(); 
--直接执行BigF会执行其内部逻辑 
--但是嵌套函数内的逻辑不会进去 
--不然就相当于递归了

--F6获得了return的samllF 同时执行了BigF
F6 =BigF(); 
--那么F6就相当于一个函数了
F6(); 

--闭包
function Fw(x)
	return function(y) --不声明函数 直接返回变量出去
		print(x+y) --这样子算闭包
		return x+y;--这样子也算
		--因为x的生命周期被保留到了返回函数之中了
	end
end

F7 = Fw(45); 
print(F7(255)); --打印300